﻿'''
题目描述
给一个字符串和一个二维字符数组，如果该字符串存在于该数组中，则按字符串的字符顺序输出字符串每个字符所在单元格的位置下标
字符串，如果找不到返回字符串“N”。
需要按照字符串的字符组成顺序搜索，且搜索到的位置必须是相邻单元格，其中“相邻单元格”是指那些水平相邻或垂直相邻的单元格。
同一个单元格内的字母不允许被重复使用。
假定在数组中最多只存在一个可能的匹配。
输入描述
第1行为一个数字N指示二维数组在后续输入所占的行数。
第2行到第N+1行输入为一个二维大写字符数组，每行字符用半角,分割。
第N+2行为待查找的字符串，由大写字符组成。
二维数组的大小为N*N，0<N<=100。
单词长度K，0<K<1000。
输出描述
出一个位置下标字符串，拼接格式为：第1个字符行下标+”,”+第1个字符列下标+”,”+第2个字符行下标+”,”+第2个字符列下标
+”,”+第N个字符行下标+”,”+第N个字符列下标。
示例1
输入
4
A,C,C,F
C,D,E,D
B,E,S,S
F,E,C,A
ACCESS
输出
0,0,0,1,0,2,1,2,2,2,2,3
说明
ACCESS分别对应二维数组的[0,0] [0,1] [0,2] [1,2] [2,2] [2,3]下标位置。
解题思路
该题目要求在一个二维字符数组（棋盘）中寻找一个给定的字符串，并按特定规则返回字符串每个字符在数组中的位置。题目的核心是
使用深度优先搜索（DFS）方法，从二维数组的每一个字符出发，按顺序查找相邻位置的字符是否能组成目标字符串。如果找到就输出路
径下标字符串，如果找不到就返回 “N”。
字符顺序和相邻性：
需要按照给定字符串中字符的顺序在二维字符数组中寻找匹配。
字符在二维数组中的位置必须是相邻的。相邻的定义是：水平方向（左右相邻）或垂直方向（上下相邻）的单元格。
不可重复使用：
在寻找过程中，同一个单元格中的字母不能被重复使用。例如，如果某个位置的字母已经被用来匹配字符串的一部分，那么在匹配同一个
字符串的其他部分时不能再次使用这个位置。
重要条件：
假设在二维数组中，最多只有一个可能的匹配路径。这意味着如果找到了一个匹配的字符串路径，就不需要考虑其他可能性。
示例用例解析：
输入：
4
A,C,C,F
C,D,E,D
B,E,S,S
F,E,C,A
ACCESS
这里二维数组是：
A C C F
C D E D
B E S S
F E C A
需要查找的字符串是 “ACCESS”。
输出：
0,0,0,1,0,2,1,2,2,2,2,3
查找过程：在二维数组中，字符串 “ACCESS” 的路径是：
‘A’ 在 [0,0]
‘C’ 在 [0,1]
‘C’ 在 [0,2]
‘E’ 在 [1,2]
‘S’ 在 [2,2]
‘S’ 在 [2,3]
输出按照这些位置下标拼接成字符串 “0,0,0,1,0,2,1,2,2,2,2,3”。
'''
#读取输入
n = int(input())

char_list = []
for _ in range(n):
    char_list.append(input().split(','))
query_word = input()

#初始化访问标志数组
visited = [[False] * n for _ in range(n)]
#定义深度搜索方法
def dfs(i, j , k, path:list):
    #如果下标越界，当前位置元素已访问或不是目标元素
    if i < 0 or i >= n or j <0 or j >= n or visited[i][j] or char_list[i][j] != query_word[k]:
        return False
    #将当前位置加入path,并标记为已访问过
    path.append([i,j])
    visited[i][j] = True
    #如果是最后一个字母，返回True
    if k >= len(query_word) - 1:
        return True
    #向相邻的四个方向继续查找
    directions = [(0,1),(0,-1),(1,0),(-1,0)]
    for dire in directions:
        next_i = i + dire[0]
        next_j = j + dire[1]
        res = dfs(next_i,next_j,k+1,path)
        if res:     #如果在某个方向找到了字符串，返回True
            return True
    #如果没找到,撤销当前位置元素的访问标志，并从路径中删除，返回False
    visited[i][j] = False
    path.pop()
    return False

result = []     #存储结果路径
output_result = 'N'
#遍历字母列表，依次查找单词
for i in range(n):
    for j in range(n):
        #当前位置字母和单词首字母相同
        if char_list[i][j] == query_word[0]:
            found = dfs(i,j,0,result)
            if found:
                #输出结果
                output_result = ''
                for res in result:
                    output_result += str(res[0]) + ',' + str(res[1]) + ','
                output_result = output_result[:-1]  #去除最后一个,
print(output_result)               


